home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / reform16.zip / ZFRAME.ASM < prev   
Assembly Source File  |  1989-11-23  |  3KB  |  117 lines

  1.    mov     AH,$0F     ;get current video mode
  2.    int     $10
  3.    cmp     al,7       ;mono?
  4.    mov     AX,$B000   ;assume mono
  5.    je      S1         ; yep
  6.     mov    ah,$B8     ; nope, color
  7. S1:
  8.    mov     ES,AX      ;ES=video memory
  9. ;
  10.    mov     si,>win_set;base of window array
  11.    mov     AX,>windnr[BP] ;the window number parm
  12.    or      AX,AX      ;0?
  13.    je      S2         ; yep
  14. ;    mov    bl,4      ;size of a window array
  15. ;    mul    BL        ;get offset in array 0..10
  16.     shl    ax,1       ;get offset in array 0..10
  17.     shl    ax,1       ;(same as * 4)
  18.     add    SI,AX      ;DS:SI=window[wind_nr]
  19. S2:
  20.    mov     AX,[SI]    ;AL=left edge, AH=width
  21.    mov     DL,AH      ;keep width in DL
  22.    mov     [>wLeft],AL;save in global
  23. ;
  24.    mov     AX,2[SI]   ;AL=top edge,AH=height
  25.    mov     DH,AH      ;keep height in DH
  26. ;
  27. ;find starting address of window
  28.    xor     AX,AX      ;clear msb
  29.    mov     BX,AX
  30.    mov     al,2[SI]   ; top edge
  31.    dec     AX
  32.    mov     [>wTop],AL ;save in global
  33. ;
  34. ;  mov     bl,160     ;ax = top_edge*160 + lf_edge*2
  35. ;  mul     bl
  36.    mov     cx,160     ;handy constant, msb 0
  37.    mul     cl         ;ax = top_edge*160 + lf_edge*2
  38.    mov     bl,[SI]    ;left edge
  39.    dec     BX
  40.    shl     BX,1
  41.    add     al,bl
  42.    adc     ah,0
  43.    mov     DI,ax      ;ES:DI= top left corner
  44.    PUSH    DI         ;save for drawing verticals
  45. ;find distance to bottom line of window
  46.    xor     AX,AX      ;clear msb
  47. ;  mov     BX,AX
  48.    mov     al,DH      ; DH=height
  49. ;  mov     bl,160     ; ax = wd_height*160
  50. ;  mul     bl
  51.    mul     cl         ;ax = wd_height*160
  52.    mov     bx,ax      ;BX=offset to bottom left
  53. ;
  54.    mov     AH,[>color];get color back
  55.    mov     AL,$0C8    ;bottom left corner
  56.    ES:
  57.    mov     [DI+BX],AX ;bottom left
  58.    mov     AL,$0C9    ;top left corner,
  59.    stosw              ;stuff, bump to next scr word
  60. ;
  61.    mov     cl,DL      ; get width of window, minus 2
  62.    dec     cx         ;(msb already 0)
  63.    mov     al,$0CD    ; get horizontal line into ax
  64.    push    AX         ;save for bottom
  65. ;
  66. ;draw the 2 horizontals
  67.    PUSH    DI         ;ES:DI = top left corner+1
  68.    PUSH    CX
  69.    rep  stosw
  70.    mov     al,$0BB    ; top right corner
  71.    ES:
  72.    mov     [DI],AX
  73.    POP     CX
  74.    POP     DI         ;ES:DI=top left corner+1
  75. ;
  76.    pop     AX         ;horizontal line char
  77.    add     DI,BX      ;now at bottom left+1
  78.    rep  stosw
  79. ;
  80.    mov     al,$0BC    ; bottom right corner
  81.    ES:
  82.    mov     [DI],ax
  83. ;
  84.    POP     DI         ;get back window starting
  85.                       ;address
  86.    mov     bl,DL      ;get width of window minus 1
  87.                       ;into bx
  88.    xor     bh,bh
  89.    shl     bx,1
  90.    add     DI,160     ; move down a line (don't
  91.                       ; overwrite corners)
  92.    mov     cl,DH      ; get height of window, minus
  93.                       ; 2, into cx
  94.    xor     ch,ch
  95.    dec     cx
  96.    mov     al,$0BA    ; get vertical line into al
  97. ;draw the two verticals
  98. V1:
  99.    ES:
  100.    mov     [DI],ax    ;left side
  101.    ES:
  102.    mov     [DI+BX],ax ;right side
  103.    add     DI,160     ;next row
  104.    loop    V1
  105. ;
  106.    xor     AX,AX      ;clear msb
  107.    mov     AL,DL
  108.    dec     AX
  109.    dec     ax
  110.    mov     [>width],AX
  111.    xor     AX,AX      ;clear msb
  112.    mov     AL,DH
  113.    dec     AX
  114.    mov     [>height],AX
  115.    mov     ax,1
  116.    mov     [>ToadY],ax ;reset ToadY to 1
  117.